package cn.h8k.hj212.factory;

import cn.h8k.hj212.codec.Hj212Encoder;
import cn.h8k.hj212.codec.Hj212Decoder;
import cn.h8k.hj212.codec.Hj212Validator;
import cn.h8k.hj212.codec.impl.DefaultHj212Encoder;
import cn.h8k.hj212.codec.impl.DefaultHj212Decoder;
import cn.h8k.hj212.codec.impl.DefaultHj212Validator;
import cn.h8k.hj212.Hj212Codec;

/**
 * HJ212协议编解码器工厂类
 * 用于创建不同配置的Hj212Codec实例
 */
public class Hj212CodecFactory {
    
    /**
     * 创建默认的HJ212协议编解码器
     * @return 默认配置的Hj212Codec实例
     */
    public static Hj212Codec createDefaultCodec() {
        Hj212Encoder encoder = new DefaultHj212Encoder();
        Hj212Decoder decoder = new DefaultHj212Decoder();
        Hj212Validator validator = new DefaultHj212Validator();
        
        return new Hj212Codec(encoder, decoder, validator);
    }
    
    /**
     * 创建自定义的HJ212协议编解码器
     * @param encoder 自定义编码器
     * @param decoder 自定义解码器
     * @param validator 自定义校验器
     * @return 自定义配置的Hj212Codec实例
     */
    public static Hj212Codec createCustomCodec(Hj212Encoder encoder, Hj212Decoder decoder, Hj212Validator validator) {
        return new Hj212Codec(encoder, decoder, validator);
    }
    
    /**
     * 创建不进行CRC校验的HJ212协议编解码器
     * @return 不进行CRC校验的Hj212Codec实例
     */
    public static Hj212Codec createNoCrcCheckCodec() {
        Hj212Encoder encoder = new DefaultHj212Encoder();
        Hj212Decoder decoder = new DefaultHj212Decoder();
        Hj212Validator validator = new DefaultHj212Validator(true, false); // 只校验长度，不校验CRC
        
        return new Hj212Codec(encoder, decoder, validator);
    }
    
    /**
     * 创建不进行任何校验的HJ212协议编解码器
     * @return 不进行校验的Hj212Codec实例
     */
    public static Hj212Codec createNoValidationCodec() {
        Hj212Encoder encoder = new DefaultHj212Encoder();
        Hj212Decoder decoder = new DefaultHj212Decoder();
        Hj212Validator validator = new DefaultHj212Validator(false, false); // 不校验长度，不校验CRC
        
        return new Hj212Codec(encoder, decoder, validator);
    }
} 